package com.starbaba.core.utils;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

@SuppressWarnings("all")
public class SortList<E> {
    public void Sort(List<E> list, final String method, final String sort) {
        Collections.sort(list, new Comparator() {
            @Override
            public int compare(Object a, Object b) {
                int ret = 0;
                try {
                    Method m1 = ((E) a).getClass().getMethod(method, null);
                    Method m2 = ((E) b).getClass().getMethod(method, null);
                    if (sort != null && "desc".equals(sort)) {// 按升序或降序排序
                        if (m1.invoke(((E) a), null).getClass().equals(Integer.class)
                                && m2.invoke(((E) b), null).getClass().equals(Integer.class)) {
                            if (Integer.parseInt(m1.invoke((E) a, null).toString()) > Integer
                                    .parseInt(m2.invoke((E) b, null).toString())) {
                                ret = -1;
                            } else {
                                ret = 1;
                            }
                        } else {
                            ret = m2.invoke(((E) b), null).toString()
                                    .compareTo(m1.invoke(((E) a), null).toString());
                        }
                    } else {
                        if (m1.invoke(((E) a), null).getClass().equals(Integer.class)
                                && m2.invoke(((E) b), null).getClass().equals(Integer.class)) {
                            if (Integer.parseInt(m1.invoke((E) a, null).toString()) > Integer
                                    .parseInt(m2.invoke((E) b, null).toString())) {
                                ret = 1;
                            } else {
                                ret = -1;
                            }
                        } else {
                            ret = m1.invoke(((E) a), null).toString()
                                    .compareTo(m2.invoke(((E) b), null).toString());
                        }
                    }
                } catch (NoSuchMethodException ne) {
                    System.out.println(ne);
                } catch (IllegalAccessException ie) {
                    System.out.println(ie);
                } catch (InvocationTargetException it) {
                    System.out.println(it);
                }
                return ret;
            }
        });
    }
}
